/*******************************************************************************
 * Copyright (c) 2013 Luigi Sgro. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Luigi Sgro - initial API and implementation
 ******************************************************************************/
package com.quantcomponents.algo;

import java.net.ConnectException;

import com.quantcomponents.core.exceptions.RequestFailedException;

/**
 * Low-level interface that groups the methods to send orders to execution services
 */
public interface IOrderReceiver {
	/**
	 * Send an order to the execution service, and retrieve the corresponding order ID from it.
	 * The order ID should be written to the order instance by the caller.
	 * @param order an order to be executed. The ID parameter {@link IOrder#getId()} is ignored. This parameter is not changed
	 * @return an ID for the order, generated by the execution service, to be written to the order instance by the caller
	 */
	String sendOrder(IOrder order) throws ConnectException, RequestFailedException;
	/**
	 * Sends a bracket order, and retrieves corresponding order IDs for them.
	 * The children orders are conditionally processed only if the parent order has been executed.
	 * @param parent parent order
	 * @param children child orders, activated only after the parent order has been executed
	 * @return an array of IDs, with the parent order ID in the first position, and the child order IDs in the
	 * respective following positions
	 */
	String[] sendBracketOrders(IOrder parent, IOrder[] children) throws ConnectException, RequestFailedException;

}